
package com.cougil.uoc.seghismed.model.ciphed;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Lob;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.persistence.UniqueConstraint;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlTransient;
import javax.xml.bind.annotation.XmlType;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;


/**
 * Entitat de negoci que representa pròpiament a un Usuari amb la seva informació xifrada
 *
 * @author Ignacio Cougil Jares
 *
 */

@Entity
@Table(
        name="USUARI_CIPHED",
        uniqueConstraints=
            @UniqueConstraint(columnNames={"IDCIPHED"})
)

/*
 * Cada entitat emmagatzemarà les seves dades particulars en una taula apart, però les
 * dades comunes romandran a la taula que guardarà la informació d'aquesta entitat pare
 */
@Inheritance(strategy=InheritanceType.JOINED)

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "UsuariCiphed", propOrder = {
		"idCiphed",
		"nomCiphed",
		"primerCognomCiphed",
		"segonCognomCiphed",
		"dniCiphed",
		"unitatOrganitzativaCiphed",
		"dataAltaCiphed",
		"dataModificacioCiphed"
})
public class UsuariCiphed {

	@Transient
	@XmlElement(name = "dataAltaCiphed")
	private byte[] dataAltaCiphed;
	@Transient
	@XmlElement(name = "dataModificacioCiphed")
	private byte[] dataModificacioCiphed;
	@Transient
	@XmlElement(name = "dniCiphed")
	private byte[] dniCiphed;
	@Id
	@GeneratedValue
	@XmlTransient
	private Integer id;
	@Lob
	@XmlElement(name = "idCiphed", required = true)
	private byte[] idCiphed;
	@Transient
	@XmlElement(name = "nomCiphed")
	private byte[] nomCiphed;
	@Transient
	@XmlElement(name = "primerCognomCiphed")
	private byte[] primerCognomCiphed;
	@Transient
	@XmlElement(name = "segonCognomCiphed")
	private byte[] segonCognomCiphed;
	@Transient
	@XmlElement(name = "unitatOrganitzativaCiphed")
	private byte[] unitatOrganitzativaCiphed;

	/* (non-Javadoc)
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(final Object other) {
		if (!(other instanceof UsuariCiphed)) {
			return false;
		}
		UsuariCiphed castOther = (UsuariCiphed) other;
		return new EqualsBuilder()
			.append(this.idCiphed, castOther.idCiphed)
			.isEquals();
	}
	/**
	 * @return Retorna el valor de la propietat dataAltaCiphed
	 */
	public byte[] getDataAltaCiphed() {
		return this.dataAltaCiphed;
	}
	/**
	 * @return Retorna el valor de la propietat dataModificacioCiphed
	 */
	public byte[] getDataModificacioCiphed() {
		return this.dataModificacioCiphed;
	}
	/**
	 * @return Retorna el valor de la propietat dniCiphed
	 */
	public byte[] getDniCiphed() {
		return this.dniCiphed;
	}
	/**
	 * @return Retorna el valor de la propietat id
	 */
	public Integer getId() {
		return this.id;
	}
	/**
	 * @return Retorna el valor de la propietat idCiphed
	 */
	public byte[] getIdCiphed() {
		return this.idCiphed;
	}
	/**
	 * @return Retorna el valor de la propietat nomCiphed
	 */
	public byte[] getNomCiphed() {
		return this.nomCiphed;
	}
	/**
	 * @return Retorna el valor de la propietat primerCognomCiphed
	 */
	public byte[] getPrimerCognomCiphed() {
		return this.primerCognomCiphed;
	}
	/**
	 * @return Retorna el valor de la propietat segonCognomCiphed
	 */
	public byte[] getSegonCognomCiphed() {
		return this.segonCognomCiphed;
	}
	/**
	 * @return Retorna el valor de la propietat unitatOrganitzativaCiphed
	 */
	public byte[] getUnitatOrganitzativaCiphed() {
		return this.unitatOrganitzativaCiphed;
	}
	/* (non-Javadoc)
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		return new HashCodeBuilder().append(this.idCiphed).toHashCode();
	}
	/**
	 * @param Estableix dataAltaCiphed com a valor de la propietat dataAltaCiphed
	 */
	public void setDataAltaCiphed(byte[] dataAlta) {
		this.dataAltaCiphed = dataAlta;
	}
	/**
	 * @param Estableix dataModificacioCiphed com a valor de la propietat dataModificacioCiphed
	 */
	public void setDataModificacioCiphed(byte[] dataModificacio) {
		this.dataModificacioCiphed = dataModificacio;
	}
	/**
	 * @param dniCiphed Estableix el valor de la propietat dniCiphed
	 */
	public void setDniCiphed(byte[] dniCiphed) {
		this.dniCiphed = dniCiphed;
	}

	/**
	 * @param Estableix id com a valor de la propietat id
	 */
	public void setId(Integer id) {
		this.id = id;
	}
	/**
	 * @param idCiphed Estableix el valor de la propietat idCiphed
	 */
	public void setIdCiphed(byte[] idCiphed) {
		this.idCiphed = idCiphed;
	}
	/**
	 * @param nomCiphed Estableix el valor de la propietat nomCiphed
	 */
	public void setNomCiphed(byte[] nomCiphed) {
		this.nomCiphed = nomCiphed;
	}
	/**
	 * @param primerCognomCiphed Estableix el valor de la propietat primerCognomCiphed
	 */
	public void setPrimerCognomCiphed(byte[] primerCognomCiphed) {
		this.primerCognomCiphed = primerCognomCiphed;
	}

	/**
	 * @param segonCognomCiphed Estableix el valor de la propietat segonCognomCiphed
	 */
	public void setSegonCognomCiphed(byte[] segonCognomCiphed) {
		this.segonCognomCiphed = segonCognomCiphed;
	}
	/**
	 * @param unitatOrganitzativaCiphed Estableix el valor de la propietat unitatOrganitzativaCiphed
	 */
	public void setUnitatOrganitzativaCiphed(byte[] unitatOrganitzativaCiphed) {
		this.unitatOrganitzativaCiphed = unitatOrganitzativaCiphed;
	}
	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
			.append("id", this.id)
			.append("idCiphed", this.idCiphed)
			.append("nomCiphed", this.nomCiphed)
			.append("primerCognomCiphed", this.primerCognomCiphed)
			.append("segonCognomCiphed", this.segonCognomCiphed)
			.append("dniCiphed", this.dniCiphed)
			.append("unitatOrganitzativaCiphed", this.unitatOrganitzativaCiphed)
			.append("dataAltaCiphed", this.dataAltaCiphed)
			.append("dataModificacioCiphed", this.dataModificacioCiphed)
			.toString();
	}

}
